package com.timanetworks.comu.utils;


import cn.hutool.core.util.ObjectUtil;
import com.timanetworks.comu.enums.BizEnum;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * EnumUtils
 */
public class BizEnumUtils
{
    public static <T extends BizEnum> String getDescByCode(final Class<T> clazz, final Integer code) {
        for (final T afterSalesEnum : clazz.getEnumConstants()) {
            if (code.equals(afterSalesEnum.getCode())) {
                return afterSalesEnum.getDesc();
            }
        }
        return null;
    }

    public static <T extends BizEnum> String getCodeByDesc(final Class<T> clazz, final String desc) {
        for (final T afterSalesEnum : clazz.getEnumConstants()) {
            if (desc.equals(afterSalesEnum.getDesc())) {
                return afterSalesEnum.getCode();
            }
        }
        return null;
    }

    public static <T extends BizEnum> BizEnum getEnumByCode(final Class<T> clazz, final String code) {
        for (final T afterSalesEnum : clazz.getEnumConstants()) {
            if (ObjectUtil.equals(afterSalesEnum.getCode(), code)) {
                return afterSalesEnum;
            }
        }
        return null;
    }

    public static <T extends BizEnum> BizEnum getEnumByName(final Class<T> clazz, final String name) {
        for (final T afterSalesEnum : clazz.getEnumConstants()) {
            if (afterSalesEnum.getName().equals(name)) {
                return afterSalesEnum;
            }
        }
        return null;
    }

    public static <T extends BizEnum> String getEnumCode(final BizEnum enumObj) {
        return (enumObj == null) ? null : String.valueOf(enumObj.getCode());
    }

    public static <T extends BizEnum> String getDescByName(final Class<T> clazz, final String name) {
        for (final T afterSalesEnum : clazz.getEnumConstants()) {
            if (name.equals(afterSalesEnum.getName())) {
                return afterSalesEnum.getDesc();
            }
        }
        return null;
    }
    public static <T extends BizEnum> List<String> getDescByCodes(final Class<T> clazz) {
        return Arrays.stream(clazz.getEnumConstants()).map(BizEnum::getCode).collect(Collectors.toList());
    }
}
